Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java class loader</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Java_class_loader"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_class_loader rootpage-Java_class_loader skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Java class loader</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><p>The <b>Java class loader</b>, part of the <a href="Java_Runtime_Environment" class="mw-redirect" title="Java Runtime Environment">Java Runtime Environment</a>, <a href="Dynamic_loading" title="Dynamic loading">dynamically loads</a> <a href="Java_class" class="mw-redirect" title="Java class">Java classes</a> into the <a href="Java_virtual_machine" title="Java virtual machine">Java Virtual Machine</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Usually classes are only loaded <a href="Lazy_initialization" title="Lazy initialization">on demand</a>. The virtual machine will only load the class files required for executing the program.<sup id="cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-0" class="reference"><a href="#cite_note-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> The Java run time system does not need to know about files and file systems as this is <a href="Delegation_(object-oriented_programming)" title="Delegation (object-oriented programming)">delegated</a> to the class loader.
</p><p>A <a href="Library_(computing)" title="Library (computing)">software library</a> is a collection of related <a href="Object_code" title="Object code">object code</a>.
In the <a href="Java_(programming_language)" title="Java (programming language)">Java language</a>, libraries are typically packaged in <a href="JAR_(file_format)" title="JAR (file format)">JAR files</a>. Libraries can contain objects of different types. The most important type of object contained in a Jar file is a <a href="Java_class" class="mw-redirect" title="Java class">Java class</a>. A class can be thought of as a named unit of code. The class loader is responsible for locating libraries, reading their contents, and loading the classes contained within the libraries. This loading is typically done "on demand", in that it does not occur until the class is called by the program. A class with a given name can only be loaded once by a given class loader.
</p><p>Each Java class must be loaded by a class loader.<sup id="cite_ref-FOOTNOTEHorstmann2022§8.2.5_Writing_Byte_Codes_to_Memory_3-0" class="reference"><a href="#cite_note-FOOTNOTEHorstmann2022§8.2.5_Writing_Byte_Codes_to_Memory-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Christudas_4-0" class="reference"><a href="#cite_note-Christudas-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Furthermore, <a href="Java_(software_platform)" title="Java (software platform)">Java</a> programs may make use of <a href="Library_(computing)" title="Library (computing)">external libraries</a> (that is, libraries written and provided by someone other than the author of the program) or they may be composed, at least in part, of a number of libraries.
</p><p>When the JVM is started, three class loaders are used:<sup id="cite_ref-TJT:UECL_5-0" class="reference"><a href="#cite_note-TJT:UECL-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-1" class="reference"><a href="#cite_note-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<ol><li>Bootstrap class loader</li>
<li>Extensions class loader</li>
<li>System class loader</li></ol>
<p>The bootstrap class loader loads the core Java libraries<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>fn 1<span class="cite-bracket">]</span></a></sup> located in the <code>&lt;JAVA_HOME&gt;/jre/lib</code> (or <code>&lt;JAVA_HOME&gt;/jmods&gt;</code> for Java 9 and above) directory. This class loader, which is part of the core JVM, is written in native code. The bootstrap class loader is not associated with any <code class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><span class="n">ClassLoader</span></code> object.<sup id="cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-2" class="reference"><a href="#cite_note-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> For instance, <code class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><span class="n">StringBuilder</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getClassLoader</span><span class="p">()</span></code> returns <code class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><span class="kc">null</span></code>.<sup id="cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-3" class="reference"><a href="#cite_note-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>The extensions class loader loads the code in the extensions directories (<code>&lt;JAVA_HOME&gt;/jre/lib/ext</code>,<sup id="cite_ref-TJT:UECL_5-1" class="reference"><a href="#cite_note-TJT:UECL-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> or any other directory specified
by the <code>java.ext.dirs</code> system property).
</p><p>The system class loader loads code found on <code>java.class.path</code>, which maps to the <code><a href="Classpath_(Java)" class="mw-redirect" title="Classpath (Java)">CLASSPATH</a></code> <a href="Environment_variable" title="Environment variable">environment variable</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="User-defined_class_loaders">User-defined class loaders</h2></div>
<p>The Java class loader is written in Java. It is therefore possible to create a custom class loader without understanding the finer details of the Java Virtual Machine. Apart from the Bootstrap class loader, every Java class loader has a parent class loader.<sup id="cite_ref-FOOTNOTEHorstmann202210.1.2_The_Class_Loader_Hierarchy_8-0" class="reference"><a href="#cite_note-FOOTNOTEHorstmann202210.1.2_The_Class_Loader_Hierarchy-8"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> The parent class loader is defined when a new class loader is instantiated or set to the virtual machine's system default class loader.
</p><p>This makes it possible (for example):
</p>
<ul><li>to load or unload classes at runtime (for example to load libraries dynamically at runtime, even from an <a href="Hypertext_Transfer_Protocol" class="mw-redirect" title="Hypertext Transfer Protocol">HTTP</a> resource). This is an important feature for:
<ul><li>implementing scripting languages, such as <a href="Jython" title="Jython">Jython</a></li>
<li>using <a href="JavaBean" class="mw-redirect" title="JavaBean">bean</a> builders</li>
<li>allowing user-defined <a href="Extensibility" title="Extensibility">extensibility</a></li>
<li>allowing multiple <a href="Namespace" title="Namespace">namespaces</a> to communicate. This is one of the foundations of <a href="Common_Object_Request_Broker_Architecture" title="Common Object Request Broker Architecture">CORBA</a> / <a href="Java_remote_method_invocation" title="Java remote method invocation">RMI</a> protocols for example.</li></ul></li>
<li>to change the way the <a href="Java_bytecode" title="Java bytecode">bytecode</a> is loaded (for example, it is possible to use <a href="Encryption" title="Encryption">encrypted</a> Java class bytecode<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup>).</li>
<li>to modify the loaded bytecode (for example, for load-time <a href="Aspect_weaver" title="Aspect weaver">weaving</a> of aspects when using <a href="Aspect-oriented_programming" title="Aspect-oriented programming">aspect-oriented programming</a>).</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Class_loaders_in_Jakarta_EE">Class loaders in Jakarta EE</h2></div>
<p><a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a> (formerly Java EE and J2EE) application servers typically load classes from a deployed <a href="WAR_(file_format)" title="WAR (file format)">WAR</a> or <a href="EAR_(file_format)" title="EAR (file format)">EAR</a> archive by a tree of class loaders, isolating the application from other applications, but sharing classes between deployed modules. So-called "<a href="Servlet_container" class="mw-redirect" title="Servlet container">servlet containers</a>" are typically implemented in terms of multiple class loaders.<sup id="cite_ref-Christudas_4-1" class="reference"><a href="#cite_note-Christudas-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="JAR_hell"> JAR hell</h2></div>
<p>JAR hell is a term similar to <a href="DLL_hell" title="DLL hell">DLL hell</a> used to describe all the various ways in which the classloading process can end up not working.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> Three ways JAR hell can occur are:
</p>
<ul><li>Accidental presence of two different versions of a library installed on a system. This will not be considered an error by the system. Rather, the system will load classes from one or the other library. Adding the new library to the list of available libraries instead of replacing it may result in the application still behaving as though the old library is in use, which it may well be.</li>
<li>Multiple libraries or applications require different versions of library <b>foo</b>. If versions of library <b>foo</b> use the same class names, there is no way to load the versions of library <b>foo</b> with the same class loader.</li>
<li>The most complex JAR hell problems arise in circumstances that take advantage of the full complexity of the classloading system. A Java program is not required to use only a single "flat" class loader, but instead may be composed of several (potentially very many) nested, cooperating class loaders. Classes loaded by different class loaders may interact in complex ways not fully comprehended by a developer, leading to errors or bugs that are difficult to analyze, explain, and resolve.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup></li></ul>
<p>The <a href="OSGi" title="OSGi">OSGi</a> Alliance specified (starting as JSR 8 in 1998) a modularity framework that aims to solve JAR hell for current and future VMs in ME, SE, and EE that is widely adopted. Using metadata in the JAR <a href="Manifest_file" title="Manifest file">manifest</a>, JAR files (called bundles) are wired on a per-package basis. Bundles can export packages, import packages and keep packages private, providing the basic constructs of modularity and versioned dependency management.
</p><p><a href="Java_version_history#Java_SE_9" title="Java version history">Java 9</a> introduced the <a href="Java_Platform_Module_System" title="Java Platform Module System">Java Platform Module System</a> in 2017. This specifies a distribution format for collections of Java code and associated resources. It also specifies a repository for storing these collections, or <i><a href="Modular_programming" title="Modular programming">modules</a></i>, and identifies how they can be discovered, loaded and checked for integrity. It includes features such as namespaces with the aim of fixing some of the shortcomings in the existing <a href="JAR_(file_format)" title="JAR (file format)">JAR</a> format. The Java Platform Module System follows a different philosophy from the OSGi architecture that aims at providing modularity for the Java Runtime Environment in a backwards-compatible way that uses the default mechanism of loading classes that the JRE provides. However, since the Java Platform Module System does not offer the ability for controlled co-existence of libraries with different versions, it does not fully address the JAR hell problem.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Loader_(computing)" title="Loader (computing)">Loader (computing)</a></li>
<li><a href="Dynamic_loading" title="Dynamic loading">Dynamic loading</a></li>
<li><a href="DLL_hell" title="DLL hell">DLL hell</a></li>
<li><a href="OSGi" title="OSGi">OSGi</a></li>
<li><a href="Classpath_(Java)" class="mw-redirect" title="Classpath (Java)">Classpath (Java)</a></li>
<li><a href="Java_Platform_Module_System" title="Java Platform Module System">Java Platform Module System</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Footnotes">Footnotes</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text">These libraries are stored in <a href="JAR_(file_format)" title="JAR (file format)">Jar files</a> called <i>rt.jar</i>, <i>core.jar</i>, <i>server.jar</i>, etc.</span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="reflist">
<div class="mw-references-wrap mw-references-columns"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFMcmanis1996" class="citation web cs1">Mcmanis, Chuck (October 1, 1996). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2077260/learn-java-the-basics-of-java-class-loaders.html">"The basics of Java class loaders"</a>. <i><a href="JavaWorld" class="mw-redirect" title="JavaWorld">JavaWorld</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-13</span></span>.</cite></span>
</li>
<li id="cite_note-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-FOOTNOTEHorstmann2022§10.1.1_The_Class-Loading_Process_2-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><a href="#CITEREFHorstmann2022">Horstmann 2022</a>, §10.1.1 The Class-Loading Process.</span>
</li>
<li id="cite_note-FOOTNOTEHorstmann2022§8.2.5_Writing_Byte_Codes_to_Memory-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEHorstmann2022§8.2.5_Writing_Byte_Codes_to_Memory_3-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFHorstmann2022">Horstmann 2022</a>, §8.2.5 Writing Byte Codes to Memory.</span>
</li>
<li id="cite_note-Christudas-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-Christudas_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Christudas_4-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFChristudas2005" class="citation web cs1">Christudas, Binildas (January 26, 2005). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180510223447/http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html">"Internals of Java Class Loading"</a>. <i>onjava.com</i>. Archived from <a rel="nofollow" class="external text" href="http://www.onjava.com/pub/a/onjava/2005/01/26/classloading.html">the original</a> on 2018-05-10.</cite></span>
</li>
<li id="cite_note-TJT:UECL-5"><span class="mw-cite-backlink">^ <a href="#cite_ref-TJT:UECL_5-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-TJT:UECL_5-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/ext/basics/load.html">"Understanding Extension Class Loading"</a>. The Java Tutorials. <i>docs.oracle.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-13</span></span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite id="CITEREFSosnoski2003" class="citation web cs1">Sosnoski, Dennis (April 29, 2003). <a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/java/library/j-dyn0429/">"Classes and class loading"</a>. <i>IBM DeveloperWorks</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2008-01-26</span></span>.</cite></span>
</li>
<li id="cite_note-FOOTNOTEHorstmann202210.1.2_The_Class_Loader_Hierarchy-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEHorstmann202210.1.2_The_Class_Loader_Hierarchy_8-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFHorstmann2022">Horstmann 2022</a>, 10.1.2 The Class Loader Hierarchy.</span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><cite id="CITEREFRoubtsov2003" class="citation web cs1">Roubtsov, Vladimir (May 9, 2003). <a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2077342/cracking-java-byte-code-encryption.html">"Cracking Java byte-code encryption"</a>. <i><a href="JavaWorld" class="mw-redirect" title="JavaWorld">JavaWorld</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-07-13</span></span>.</cite></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><cite id="CITEREFdeBoerKarasiuk2002" class="citation web cs1">deBoer, Tim; Karasiuk, Gary (August 21, 2002). <a rel="nofollow" class="external text" href="https://www.ibm.com/developerworks/websphere/library/techarticles/0112_deboer/deboer.html">"J2EE Class Loading Demystified"</a>. <i>IBM DeveloperWorks</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2008-01-26</span></span>.</cite></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130601002059/http://incubator.apache.org/depot/version/jar-hell.html">"Depot - Apache Incubator"</a>. Archived from <a rel="nofollow" class="external text" href="https://incubator.apache.org/depot/version/jar-hell.html">the original</a> on 2013-06-01.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://articles.qos.ch/classloader.html">"Taxonomy of class loader problems with Jakarta Commons Logging"</a>.</cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><cite id="CITEREFBartlettHackbarth2016" class="citation web cs1">Bartlett, Neil; Hackbarth, Kai (2016-09-22). <a rel="nofollow" class="external text" href="https://www.infoq.com/articles/java9-osgi-future-modularity/#1">"Java 9, OSGi and the Future of Modularity (Part 1)"</a>. InfoQ.</cite></span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li>Chuck McManis, "<a rel="nofollow" class="external text" href="https://www.infoworld.com/article/2077260/learn-java-the-basics-of-java-class-loaders.html">The basics of Java class loaders</a>", 1996</li>
<li>Brandon E. Taylor, "<a rel="nofollow" class="external text" href="http://www.developer.com/java/other/article.php/2248831">Java Class Loading: The Basics</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20201109091535/http://www.developer.com/java/other/article.php/2248831">Archived</a> 2020-11-09 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>", 2003</li>
<li><cite id="CITEREFHorstmann2022" class="citation book cs1">Horstmann, Cay (April 15, 2022). <i>Core Java</i>. Oracle Press Java. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-13-787107-4</bdi>.</cite></li>
<li>Jeff Hanson, "<a rel="nofollow" class="external text" href="http://www.devx.com/Java/Article/31614">Take Control of Class Loading in Java</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20201204030013/http://www.devx.com/Java/Article/31614">Archived</a> 2020-12-04 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>", 2006-06-01</li>
<li>Andreas Schaefer, "<a rel="nofollow" class="external text" href="https://web.archive.org/web/20180506212821/http://www.onjava.com/pub/a/onjava/2003/11/12/classloader.html">Inside Class Loaders</a>", 2003-11-12</li>
<li>Sheng Liang and Gilad Bracha, "<a rel="nofollow" class="external text" href="https://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.762">Dynamic class loading in the Java virtual machine</a>", In Proceedings of the 13th ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'98), ACM SIGPLAN Notices, vol. 33, no. 10, ACM Press, 1998, pp.&nbsp;36–44 <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F286936.286945">10.1145/286936.286945</a></li>
<li>Jeremy Whitlock, "<a rel="nofollow" class="external text" href="https://web.archive.org/web/20080628071703/http://dev2dev.bea.com/blog/jcscoobyrs/archive/2005/05/realworld_use_f.html">Real-World Use For Custom ClassLoaders</a>", May 2005</li>
<li>Christoph G. Jung, "<a rel="nofollow" class="external text" href="https://web.archive.org/web/20130201093532/http://www.roseindia.net/javatutorials/hotdeploy.shtml">Classloaders Revisited Hotdeploy</a>", <i>Java Specialist Newsletter</i>, 2001-06-07</li>
<li>Don Schwarz, "<a rel="nofollow" class="external text" href="https://web.archive.org/web/20180506083919/http://www.onjava.com/pub/a/onjava/2005/04/13/dependencies.html">Managing Component Dependencies Using ClassLoaders</a>", 2005-04-13</li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-11-26" href="https://en.wikipedia.org/wiki/?title=Java_class_loader&amp;oldid=1259720290">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>